import { Request, Response } from 'express';
import bcrypt from 'bcryptjs';
import jwt from 'jsonwebtoken';
import User from '../models/User'; // 正确导入 User 模型

// 注册
export const register = async (req: Request, res: Response): Promise<void> => {
    try {
        const { username, email, password, gender } = req.body; // 包含性别

        // 检查用户是否已存在
        const existingUser = await User.findOne({ where: { username } });
        if (existingUser) {
            res.status(400).json({ success: false, message: '用户名已存在' });
            return;
        }

        // 检查邮箱是否已存在
        const existingEmail = await User.findOne({ where: { email } });
        if (existingEmail) {
            res.status(400).json({ success: false, message: '邮箱已被注册' });
            return;
        }

        // 创建新用户
        await User.create({ username, email, password, gender }); // 包含性别

        // 生成 JWT token（注册可选，但通常会做）
        // const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET!, { expiresIn: '1h' });

        // 返回成功响应
        res.status(201).json({ success: true, message: '用户注册成功' });
        return;

    } catch (error) {
        console.error('Registration error:', error);
        res.status(500).json({ success: false, message: '用户注册失败' });
    }
};

// Login
// ... existing code ...

// Get user profile
// ... existing code ...

// Update user profile
export const updateUserProfile = async (req: Request, res: Response): Promise<void> => {
    try {
        // 用户 ID 可从认证中间件中获取
        const userId = (req as any).user.id;
        const updates: Partial<User> = req.body; // 明确指定 req.body 的类型

        // 查找用户
        const user = await User.findByPk(userId);

        if (!user) {
            res.status(404).json({ success: false, message: '用户未找到' });
            return;
        }

        // 可选：验证传入数据
        // 例如，检查用户名是否正在更改以及新用户名是否存在
        if (updates.username && updates.username !== user.username) {
            const existingUser = await User.findOne({ where: { username: updates.username } });
            if (existingUser) {
                res.status(400).json({ success: false, message: '用户名已存在' });
                return;
            }
        }

        // 应用更新
        // 只允许更新特定字段以防止意外更改
        const allowedUpdates: (keyof Partial<User>)[] = ['username', 'avatar', 'gender', 'age', 'location'];
        allowedUpdates.forEach(field => {
            if (updates[field] !== undefined) { // 检查更新中是否存在该字段
                (user as any)[field] = updates[field];
            }
        });

        await user.save(); // 保存更新后的用户

        // 获取更新后的用户并返回
        const updatedUser = await User.findByPk(userId, {
            attributes: { exclude: ['password'] } // 排除密码
        });

        res.status(200).json({ success: true, user: updatedUser, message: '用户资料更新成功' });
        return;

    } catch (error) {
        console.error('Error updating user profile:', error);
        res.status(500).json({ success: false, message: '更新用户资料失败' });
    }
}; 